#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@NAME          : security.py
@TIME          : 2025/03/02 10:00:00
@AUTHOR        : chenlip
@VERSION       : 0.1.0
@DESCRIPTION   : 安全相关工具函数
'''

import html
import re

def sanitize_input(data):
    """
    对输入数据进行清洗，防止XSS攻击
    
    Args:
        data: 输入数据，可以是字符串、字典、列表
        
    Returns:
        清洗后的数据
    """
    if isinstance(data, str):
        # 对字符串进行HTML转义
        return html.escape(data)
    elif isinstance(data, dict):
        # 对字典中的每个值递归调用
        return {k: sanitize_input(v) for k, v in data.items()}
    elif isinstance(data, list):
        # 对列表中的每个元素递归调用
        return [sanitize_input(item) for item in data]
    else:
        # 其他类型直接返回
        return data

def is_secure_password(password):
    """
    检查密码强度
    
    Args:
        password: 待检查的密码
        
    Returns:
        (bool, str): (是否足够强, 错误消息)
    """
    if len(password) < 8:
        return False, "密码长度至少需要8个字符"
        
    # 检查是否包含大写字母
    if not re.search(r'[A-Z]', password):
        return False, "密码至少需要包含一个大写字母"
        
    # 检查是否包含小写字母
    if not re.search(r'[a-z]', password):
        return False, "密码至少需要包含一个小写字母"
        
    # 检查是否包含数字
    if not re.search(r'\d', password):
        return False, "密码至少需要包含一个数字"
        
    # 检查是否包含特殊字符
    if not re.search(r'[!@#$%^&*(),.?":{}|<>]', password):
        return False, "密码至少需要包含一个特殊字符"
        
    return True, ""
